/***************************************
 * 日历 相关
 ***************************************/
$.extend($app, {
	/**
	 * 格式化时间戳
	 * type		1年月日时分 / 2年月日 / 3年月  / 4月日 / 5年
	 * time		时间戳
	 **/
	formatTime: function(type, time) {
		//格式化时间戳
		Date.prototype.Format = function(fmt) { // author: meizz
			var o = {
				"M+": this.getMonth() + 1, // 月份
				"d+": this.getDate(), // 日
				"h+": this.getHours(), // 小时
				"m+": this.getMinutes(), // 分
				"s+": this.getSeconds(), // 秒
				"q+": Math.floor((this.getMonth() + 3) / 3), // 季度
				"S": this.getMilliseconds() // 毫秒
			};
			if (/(y+)/.test(fmt))
				fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
			for (var k in o)
				if (new RegExp("(" + k + ")").test(fmt)) {
					fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
				}
			return fmt;
		}

		var out = '';
		switch (parseInt(type)) {
			case 1:
				out = 'yyyy-MM-dd hh:mm';
				break;
			case 2:
				out = 'yyyy-MM-dd';
				break;
			case 3:
				out = 'yyyy-MM';
				break;
			case 4:
				out = 'MM-dd';
				break;
			case 5:
				out = 'yyyy';
				break;
		}

		return new Date(parseInt(time) * 1000).Format(out);
	},


	//时间戳 还原计时器 时:分:秒
	timeWatch: function(num) {
		// 时分秒 全定义为 0
		var hour, minute, second = 0;
		hour = Math.floor(num / 60 / 60);
		minute = Math.floor(num / 60 % 60);
		second = Math.floor(num % 60);

		hour = (10000 + hour).toString().substring(3, 5);
		minute = (10000 + minute).toString().substring(3, 5);
		second = (10000 + second).toString().substring(3, 5);

		var out = hour + ":" + minute + ":" + second;
		//console.log(hour + ":" + minute + ":" + second);

		return out;
	},

	//获取 今天的时间 是否格式
	today: function(format) {
		var today = parseInt((new Date().getTime()) / 1000);
		return $app.formatNear(today, format);
	},
	//获取 昨天的时间 是否格式
	yesterday: function(format) {
		var yesterday = $app.today() - 86400;
		return $app.formatNear(yesterday, format);
	},
	//获取 明天的时间 是否格式
	tomorrow: function(format) {
		var tomorrow = $app.today() + 86400;
		return $app.formatNear(tomorrow, format);
	},
	//前xx天
	beforeDay:function(dateNum,format){
		var aa=$app.today()-(86400*dateNum);
		return $app.formatNear(aa,format);
	},
	//后xx天
	afterDay:function(dateNum,format){
		var aa=$app.today()+(86400*dateNum);
		return $app.formatNear(aa,format)
	},
	// 输出日期 or 时间戳？
	// format true返回2018-09-02 false返回时间戳
	formatNear: function(date, format) {
		var out = '';
		if (!!format) {
			out = $app.formatTime(2, date);
		} else {
			out = date
		}
		return out;
	},


	/*
	 * 格式化 月的时间
	 * time 输入格式 2018-09-03
	 * 输出格式 2018-09 /  默认为空 输出当前时间
	 * */
	formatMonth: function(time) {
		var out = '';
		if (!!time) {
			out = time;
		} else {
			out = $app.today(true);
		}
		return out.substring(0, 7);
	},

	//获取现在本年 输出格式：2018
	/*
	 * 格式化 年的时间
	 * time 输入格式 2018-09-03
	 * 输出格式 2018 /  默认为 空输出当前时间
	 * */
	formatYear: function(time) {
		var out = '';
		if (!!time) {
			out = time
		} else {
			out = $app.today(true);
		}
		return out.substring(0, 4);
	},


	//单日历弹框 选择年,num:1无限=今天,2今天=无限,3无限=今天=无限
	datePickerYear: function(dom,num, callBack) {
		if(num==1){
			$app.datePickerA(dom,$app.dateMinTime, $app.formatYear(),callBack);
		}else if(num==2){
			$app.datePickerA(dom,$app.formatYear(), undefined,callBack);
		}else if(num==3){
			$app.datePickerA(dom,$app.dateMinTime, undefined,callBack);
		}
	},
	datePickerA:function(dom,star,end, callBack){
		$app.datePickerBase(dom, 'yyyy', star, end, function(e, tW) {
			var time = $app.formatYear($app.formatTime(3, tW));
			$(dom).val(time);
			callBack(time);
		});
	},
	//单日历弹框 选择年月,num:1无限=今天,2今天=无限,3无限=今天=无限
	datePickerMonth: function(dom,num, callBack) {
		if(num==1){
			$app.datePickerMonthA(dom,$app.dateMinTime, $app.formatMonth(),callBack);
		}else if(num==2){
			$app.datePickerMonthA(dom,$app.formatMonth(), undefined,callBack);
		}else if(num==3){
			$app.datePickerMonthA(dom,$app.dateMinTime, undefined,callBack);
		}
		
	},
	datePickerMonthA:function(dom,star,end, callBack){
		$app.datePickerBase(dom, 'yyyy-mm', star,end, function(e, tW) {
			var time = $app.formatTime(3, tW);
			$(dom).val(time);
			callBack(time);
		});
	},
	
	//两个日期范围 排序,输入 小&大
	dateDoubleXuGood:function(time1,time2,callBack){
		//输入格式: 2018-02-21
		var a1=parseInt(time1.replace(/\-/g,''));
		var a2=parseInt(time2.replace(/\-/g,''));
		
		var start='', end='';
		if(a1<a2){//大于
			start=$app.dateChangeSee(a1);
			end=$app.dateChangeSee(a2);
		}else{//小于 或 等于
			start=$app.dateChangeSee(a2);
			end=$app.dateChangeSee(a1);
		}
		callBack(start,end);
	},
	
	//20180812 或2018-08-12 日期转2018-08-12格式, 输入: 年月日/年月/年 都可以
	dateChangeSee:function(timeIn){
		var out='';
		var time=timeIn.toString();
		if(time.indexOf('-') > -1){//2018-08-12 格式
			var b1=time.substring(0,4);
			var b2=time.substring(5,7);
			var b3=time.substring(8);
			out+=b1;
			$app.judgeData(b2)&&(out+='-'+b2);
			$app.judgeData(b3)&&(out+='-'+b3);
		}else{
			var b1=time.substring(0,4);
			var b2=time.substring(4,6);
			var b3=time.substring(6);
			out+=b1;
			$app.judgeData(b2)&&(out+='-'+b2);
			$app.judgeData(b3)&&(out+='-'+b3);
		}
		
		//console.log(b1,b2,b3)
		return out;
	},

	/*
	 * 日历范围选择器
	 * dom 节点
	 * range 范围: 1无限=今天 / 2今天=无限 / 3 无限=今天=无限
	 * callBack 成功回调
	 */
	datePickerDay: function(dom, range, callBack) {
		var startDate = '',
			endDate = '';

		if (range == 1) { //无限小=今天

			startDate = $app.dateMinTime;
			endDate = $app.today(true);
		} else if (range == 2) { //今天=无限大

			startDate = $app.today(true);
			endDate = false;

		} else if (range == 3) { //无限小=今天=无限大

			startDate = $app.dateMinTime;
			endDate = false;

		}

		$app.datePickerBase(dom, 'yyyy-mm-dd', startDate, endDate, function(e, tW) {
			var time = $app.formatTime(2, tW);
			$(dom).val(time);
			callBack(time);
		});
	},

	//单日历弹框 基础封装
	datePickerBase: function(dom, format, startDate, endDate, callBack) {
		var viewNum = '';
		if (format == 'yyyy') { //年
			viewNum = 4;
		} else if (format == 'yyyy-mm') { //年月
			viewNum = 3;
		} else if (format == 'yyyy-mm-dd') { //年月日
			viewNum = 2;
		}
		$(dom).datetimepicker({
			language: 'zh-CN', //中文，空为英文
			format: format, //格式化年月
			startDate: startDate, //最小 能选时间
			endDate: endDate, //最大 能选时间
			todayBtn: true, //显示今天按钮
			autoclose: true, //当选择一个日期之后是否立即关闭此日期时间选择器
			todayHighlight: true, //今天高亮
			startView: viewNum, //日历 初始化显示层级：4年/3月/2日/1小时/0分钟
			minView: viewNum //日历 最终选择到的层级：配置同上
		}).on('changeDate', function(e) {
			var tW = e.date.valueOf() / 1000;
			callBack(e, tW);
		});
	},

	/*
	 * 日历范围选择器
	 * dom 节点
	 * range 范围: 1无限小=今天 / 2今天=无限大 / 3 无限小=今天=无限大
	 * startD 开始日期 格式:2018-09-03
	 * endD 结束日期
	 * callBack 成功回调
	 */
	dateRange: function(dom, range, startD, endD, callBack) {

		var minDate = '',
			maxDate = '';

		if (range == 1) { //无限小=今天

			minDate = $app.dateMinTime;
			maxDate = $app.today(true);

		} else if (range == 2) { //今天=无限大

			minDate = $app.today(true);
			maxDate = false;

		} else if (range == 3) { //无限小=今天=无限大

			minDate = $app.dateMinTime;
			maxDate = false;

		}


		//日期控件初始化
		$(dom).daterangepicker({
			locale: $app.dateRangeLocale,
			minDate: minDate, //最小 能选时间
			maxDate: maxDate, //最大 能选时间

			//能选的区间范围
			startDate: startD,
			endDate: endD,

			autoApply: true //自动输出日期，隐藏添加按钮
		}, function(start, end) {
			var a = start.format('YYYY-MM-DD');
			var b = end.format('YYYY-MM-DD');
			callBack instanceof Function && callBack(a, b);
		});
	}
});
